package com.foo.designpattern.composite.transparentcomposite;

import java.util.List;

/**
 * com.foo.designpattern.composite.transparentcomposite
 * Created with IntelliJ IDEA.
 * Created by jiang on 2016-05-20 17:18.
 *
 * @Description 抽象构件(Component)角色
 * 抽象构件角色：组合中的对象声明接口，在适当的情况下，实现所有类共有接口的默认行为。
 * 声明一个接口用于访问和管理抽象构件角色(Component)的子部件(Composite,Leaf)。
 */

public abstract class Component {
    /**
     * 输出组建自身的名称
     *
     * @param preStr
     */
    public abstract void printStructure(String preStr);

    /**
     * 聚集管理方法：增加一个子构件对象
     *
     * @param child 子构件对象
     */
    public void addChild(Component child) {
        /**
         * 缺省实现，抛出异常。
         * 因为叶子对象没有此功能或者子组件没有实现这个功能
         */
        throw new UnsupportedOperationException("对象不支持此功能");
    }

    /**
     * 聚集管理方法：删除一个子构件对象
     *
     * @param index 子构件对象的下标
     */
    public void removeChild(int index) {
        /**
         * 缺省实现，抛出异常
         * 因为叶子对象没有此功能或者子组件没有实现这个功能
         */
        throw new UnsupportedOperationException("对象不支持此功能");
    }

    /**
     * 聚集管理方法：返回所有子构件对象
     */
    public List<Component> getChild() {
        /**
         * 缺省实现，抛出异常
         * 因为叶子对象没有此功能或者子组件没有实现这个功能
         */
        throw new UnsupportedOperationException("对象不支持此功能");
    }

}
